home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 3: Developer Tools / Linux Cubed Series 3 - Developer Tools.iso / devel / make / icmake-6.000 / icmake-6 / icmake / comp / data.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-02-08  |  11.2 KB  |  349 lines

  1.  
  2. /*
  3.                                 D A T A . C
  4. */
  5.  
  6. #include "iccomp.h"
  7.  
  8. char
  9.     *filenames,
  10.     *funstring[] =                          /* only one_arg  */
  11.     {
  12.         "arghead",
  13.         "argtail",
  14.         "ascii",
  15.         "ascii",
  16.  
  17.         "change_base",
  18.         "chdir",
  19.         "change_ext",
  20.         "cmdhead",
  21.         "cmdtail",
  22.         "change_path",
  23.  
  24.         "echo",
  25.         "element",
  26.         "exec",
  27.         "execute",
  28.         "exists",
  29.  
  30.         "strtok",
  31.         "fgets",
  32.         "fprintf",
  33.  
  34.         "get_base",
  35.         "getch",
  36.         "gets",
  37.         "get_ext",
  38.         "get_path",
  39.  
  40.         "makelist",
  41.  
  42.         "printf",
  43.         "putenv",
  44.  
  45.         "sizeoflist",
  46.         "stat",
  47.         "element",                          /* f_str_el */
  48.         "strlwr",
  49.         "strupr",
  50.         "system",
  51.         "strlen",
  52.         "substr",
  53.     },
  54.     icm_comp[]          = "ICM-COMP:",
  55.     illegal_argcount[]  = "%s(): too few arguments",
  56.     illegal_cast[]      = "illegal cast",
  57.     illegal_type[]      = "illegal type for %s",
  58.     lvalue_needed[]     = "lvalue needed for %s",
  59.     nullstring[]        = "",
  60.     *opstring[] =
  61.     {
  62.         NULL,                               /*     op_jmp, */
  63.         NULL,                               /*     op_jmp_false, */
  64.         NULL,                               /*     op_jmp_true, */
  65.         NULL,                               /*     op_push_1_jmp_end, */
  66.         NULL,                               /*     op_push_0, */
  67.         NULL,                               /*     op_push_imm, */
  68.         NULL,                               /*     op_push_strconst, */
  69.         NULL,                               /*     op_push_var, */
  70.         NULL,                               /*     op_push_reg, */
  71.         NULL,                               /*     op_pop_var, */
  72.         "(unary) -",                        /* op_umin, */
  73.         "(int)",                            /* op_atoi, */
  74.         "(string)",                         /* op_itoa, */
  75.         "(list)",                           /* op_atol, */
  76.         "*",                        /* op_mul, */
  77.         "/",                        /* op_div, */
  78.         "%%",                       /* op_mod, */
  79.         "+",                        /* op_add, */
  80.         "-",                        /* op_sub, */
  81.         "==",                       /* op_eq, */
  82.         "!=",                       /* op_neq, */
  83.         "<",                        /* op_sm, */
  84.         ">",                        /* op_gr, */
  85.         "younger",                  /* op_younger, */
  86.         "older",                    /* op_older, */
  87.         "<=",                       /* op_smeq, */
  88.         ">=",                       /* op_greq, */
  89.         NULL,                               /* op_call */
  90.         NULL,                               /* op_asp */
  91.         NULL,                               /* op_ret */
  92.         NULL,                               /* op_copy_var */
  93.         "++",                       /* op_inc */
  94.         "--",                       /* op_dec */
  95.         NULL,                               /* op_call */
  96.         NULL,                               /* op_frame */
  97.         NULL,                               /* op_ret */
  98.         NULL,                               /* op_pop_ */
  99.         "&",                                /* op_band */
  100.         "|",                                /* op_bor */
  101.         "~",                                /* op_bnot */
  102.         "^",                                /* op_xor */
  103.         "<<",                               /* op_shl */
  104.         ">>",                               /* op_shr */
  105.     },
  106.     *source_name,
  107.     string[100],                         /* fixed STRING buffer */
  108.     *stringbuf,                          /* final STRING */
  109.     type_conflict[] = "conflicting operand types for %s";
  110.  
  111. E_TYPE_
  112.     vartype;
  113.  
  114. E_TYPE_
  115.     optype[] =
  116.     {
  117.         0,                                  /*     op_jmp, */
  118.         0,                                  /*     op_jmp_false, */
  119.         0,                                  /*     op_jmp_true, */
  120.         0,                                  /*     op_push_1_jmp_end, */
  121.         0,                                  /*     op_push_0, */
  122.         0,                                  /*     op_push_imm, */
  123.         0,                                  /*     op_push_strconst, */
  124.         0,                                  /*     op_push_var, */
  125.         0,                                  /*     op_push_reg, */
  126.         0,                                  /*     op_pop_var, */
  127.         e_int | e_list | e_bool,            /* op_umin, */
  128.         e_str,                              /* op_atoi, */
  129.         e_int | e_bool,                     /* op_itoa, */
  130.         e_str,                              /* op_atol, */
  131.         e_int | e_bool,                     /* op_mul,  */
  132.         e_int | e_bool,                     /* op_div,  */
  133.         e_int | e_bool,                     /* op_mod,  */
  134.         ALLTYPES,                           /* op_add, */
  135.         ALLTYPES,                           /* op_sub, */
  136.         ALLTYPES,                           /* op_eq, */
  137.         ALLTYPES,                           /* op_neq, */
  138.         e_int | e_bool | e_str,             /* op_sm, */
  139.         e_int | e_bool | e_str,             /* op_gr, */
  140.         e_str,                              /* op_younger, */
  141.         e_str,                              /* op_older, */
  142.         e_int | e_bool | e_str,             /* op_smeq, */
  143.         e_int | e_bool | e_str,             /* op_greq, */
  144.         0,                                  /* op_call */
  145.         0,                                  /* op_asp */
  146.         0,                                  /* op_ret */
  147.         0,                                  /* op_copy_var */
  148.         e_int,                              /* op_inc */
  149.         e_int,                              /* op_dec */
  150.         0,                                  /* op_call */
  151.         0,                                  /* op_frame */
  152.         0,                                  /* op_ret */
  153.         0,                                  /* op_pop_ */
  154.         e_int,                              /* op_band */
  155.         e_int,                              /* op_bor */
  156.         e_int,                              /* op_bnot */
  157.         e_int,                              /* op_xor */
  158.         e_int,                              /* op_shl */
  159.         e_int,                              /* op_shr */
  160.     };
  161.  
  162. FILE
  163.     *s_bin;
  164.  
  165. int
  166.     parse_error = err_code_or_vars_expected,
  167.     (*yylex_input)(char *, int) =           /* pointer to yylex input to use */
  168.                             yylex_file;     /* start reading from file       */
  169.  
  170. OPCODE_
  171.     lastop = op_hlt;
  172.  
  173. STRINGTAB_
  174.     *stringtab;
  175.  
  176. SYMTAB_
  177.     local,
  178.     funtab,
  179.     global,
  180.     *entertab = &global;
  181.  
  182. HIDDEN_FUNCTION_
  183.     hidden[he_] =
  184.     {
  185.         {
  186.             "h_older",                      /* name */
  187.                                             /* source of the hidden function */
  188.             "list h_older(int attrib, string mask, string file)"
  189.             "{"
  190.             "   int"
  191.             "       index;"
  192.             "   list"
  193.             "       source,"
  194.             "       dest;"
  195.             "   string"
  196.             "       s;"
  197.             ""
  198.             "   source = makelist(attrib, mask);"
  199.             "   for (index = sizeof(source); index--; )"
  200.             "   {"
  201.             "       s = element(index, source);"
  202.             "       if (s older file)"
  203.             "           dest += (list)s;"
  204.             "   }"
  205.             "   return (dest);"
  206.             "}",
  207.  
  208.             e_reg | e_list,                 /* returntype */
  209.             0,                              /* must be 0, set to 1 if called */
  210.             3,                              /* number of arguments */
  211.         },
  212.  
  213.         {
  214.             "h_younger",
  215.  
  216.             "list h_younger(int attrib, string mask, string file)"
  217.             "{"
  218.             "   int"
  219.             "       index;"
  220.             "   list"
  221.             "       source,"
  222.             "       dest;"
  223.             "   string"
  224.             "       s;"
  225.             ""
  226.             "   source = makelist(attrib, mask);"
  227.             "   for (index = sizeof(source); index--; )"
  228.             "   {"
  229.             "       s = element(index, source);"
  230.             "       if (s younger file)"
  231.             "           dest += (list)s;"
  232.             "   }"
  233.             "   return (dest);"
  234.             "}",
  235.  
  236.             e_reg | e_list,
  237.             0,
  238.             3,
  239.         },
  240.  
  241.         {
  242.             "h_strlwr",
  243.             "string h_strlwr(string str)"
  244.             "{"
  245.             "   int"
  246.             "       index;"
  247.             "   string"
  248.             "       c,"
  249.             "       dest;"
  250.             ""
  251.             "   for (index = 0; c = element(index, str); index++)"
  252.             "   {"
  253.             "       if (c >= \"A\" && c <= \"Z\")"
  254.             "           c = ascii('a' - 'A' + ascii(c));"
  255.             "       dest += c;"
  256.             "   }"
  257.             "   return (dest);"
  258.             "}",
  259.  
  260.             e_reg | e_str,
  261.             0,
  262.             1,
  263.         },
  264.         {
  265.             "h_strupr",
  266.  
  267.             "string h_strupr(string str)"
  268.             "{"
  269.             "   int"
  270.             "       index;"
  271.             "   string"
  272.             "       c,"
  273.             "       dest;"
  274.             ""
  275.             "   for (index = 0; c = element(index, str); index++)"
  276.             "   {"
  277.             "       if (c >= \"a\" && c <= \"z\")"
  278.             "           c = ascii('A' - 'a' + ascii(c));"
  279.             "       dest += c;"
  280.             "   }"
  281.             "   return (dest);"
  282.             "}",
  283.  
  284.             e_reg | e_str,
  285.             0,
  286.             1,
  287.         },
  288.         {
  289.             "h_strlen",
  290.  
  291.             "int h_strlen(string s)"
  292.             "{"
  293.             "   int"
  294.             "       len;"
  295.             ""
  296.             "   while (element(len, s))"
  297.             "       len++;"
  298.             "   return (len);"
  299.             "}",
  300.  
  301.             e_reg | e_int,
  302.             0,
  303.             1,
  304.         },
  305.         {
  306.             "h_substr",
  307.  
  308.             "int h_substr(string str, string sub)"
  309.             "{"
  310.             "    int"
  311.             "        strindex,"
  312.             "        subindex,"
  313.             "        mismatch;"
  314.             ""
  315.             "    for (strindex = 0; element (strindex, str); strindex++)"
  316.             "    {"
  317.             "        mismatch = 0;"
  318.             "        for (subindex = 0; element (subindex, sub) && !mismatch; subindex++)"
  319.             "            if (element (strindex + subindex, str) !="
  320.             "                element (subindex, sub)"
  321.             "               )"
  322.             "                mismatch = 1;"
  323.             "        if (! mismatch)"
  324.             "            return (strindex);"
  325.             "    }"
  326.             ""
  327.             "    return (-1);"
  328.             "}",
  329.  
  330.             e_reg | e_int,
  331.             0,
  332.             2,
  333.         },
  334.     };
  335.  
  336. unsigned
  337.     break_ok,
  338.     *dead,
  339.     dead_sp,
  340.     errcount,
  341.     hidden_called,
  342.     nestlevel,
  343.     n_params,
  344.     n_strings,
  345.     n_symbols,
  346.     sem_err,
  347.     stringsize,
  348.     yylineno = 1;
  349.